package com.yugao.fintech.antelope.auth.service;

import com.yugao.fintech.antelope.auth.model.LockUser;
import com.yugao.fintech.antelope.auth.model.rqrs.ConditionLockUserResp;
import com.yugao.fintech.antelope.auth.oauth2.Authentication;
import com.yugao.fintech.antelope.auth.oauth2.model.RegisteredClient;

public interface LoginUserService {
    /**
     * 获取锁定用户信息
     *
     * @param account 账号
     * @return 如果返回为空, 说明当前账号被锁定
     */
    LockUser getLockUser(String account, Authentication authentication);

    /**
     * 检查锁用户
     */
    void checkLockUser(String account, Authentication authentication);

    /**
     * 锁定用户, 不一定会锁定, 只有达到锁定的条件时候才会进行锁定(登录失败调用)
     *
     * @param account 账号
     * @return 不为null: 返回剩余次数, 当次数达到0时候, 就会被锁定
     * 为null:  没有使能限制登录失败次数功能, 业务层不需要做任何处理
     */
    ConditionLockUserResp conditionLockUser(String account, Authentication authentication);

    /**
     * 登录成功之后释放锁定用户相关缓存数据(登录成功调用)
     *
     * @param account 账号
     */
    void unLockUser(String account, RegisteredClient registeredClient);
}
